/*
假设有一个数据序列，其中每个数据元素都包含name和votes两项，name表示人名（是不含空格的字母串），votes表示票数（是正整数），同一个name在序列中可能多次出现。
请编写程序，对给定的数据序列按照name进行统计，计算出每个name所得总票数并输出（不要求次序）；程序还需提供查找功能，即：接受输入的name，查询其所得票数并输出，若name不在给定的数据序列中，则输出"none”，输入"Quit"时结束查询。
例如，数据序列如下：Ella 5   Bob 3   Ella 2   Andy 5    Bob 1  
          统计结果为：Ella 7   Bob 4   Andy 5
          查询时，输入"Bob"，输出"4" ；输入"Ammy", 输出"none";  输入"Quit"，查询结束。
提示：用string、map
(附测试数据：data.txt提供数据序列，in.txt为查询时的样例输入，out.txt为样例输出-输出格式不要求，样例仅供参考)*/
#include <map>
#include <iostream>
#include <fstream>
using namespace std;

map<string,int> person;
void read_data();
void print_data();
void query();
int main(int argc, char const *argv[])
{
    read_data();
    print_data();
    query();
    return 0;
}

void read_data(){
    string name;
    int vote;
    ifstream file;
    file.open("data.txt",ios::in);
    map<string,int>::iterator it;
    while (file>>name)
    {
        file>>vote;
        if (person.count(name))
        {
            it=person.find(name);
            it->second+=vote;
        }else
        {
            person.insert(pair<string,int>(name,vote));
        }
    }
}

void print_data(){
    for (map<string,int>::iterator it = person.begin(); it!=person.end(); it++)
    {   
        cout<<it->first<<"\t"<<it->second<<endl;
    }
    cout<<endl;
}

void query(){
    ifstream file;
    file.open("in.txt",ios::in);
    string tmp;
    map<string,int>::iterator it;
    cout<<"Query Who?"<<endl<<"����������������������������������"<<endl;
    while (file>>tmp)
    {
        if (tmp!="Quit")
        {
            if (person.count(tmp))
            {
                it = person.find(tmp);
                cout<<tmp<<":   "<<it->second<<endl;
            }else
            {
                cout<<tmp<<":\tnone"<<endl;
            }
        }else
        {
            cout<<"Quit";
        }
    }
}